/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package negocios;

import acceso_datos.RegistroLlamadaDB;
import datos.Notificador;
import datos.RegistroLlamada;
import exceptions.AlfanumericoException;
import exceptions.Alfanumero;
import exceptions.OperadorException;
import exceptions.RegistroLlamadaException;
import exceptions.UsuarioException;
import java.sql.Date;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author miguesaca
 */
public class GestorRegistroLlamadas {

    private RegistroLlamada registroLlamada;
    HashMap<Integer, RegistroLlamada> listaRegistroLlamadas = new HashMap<Integer, RegistroLlamada>();
    ///momentaneamente hasta la impltcion de la base
    private int clave = 0;
    private Alfanumero alfaNumero;

    public GestorRegistroLlamadas() throws SQLException {
        alfaNumero = new Alfanumero();
        cargarDatos();
    }

    public RegistroLlamada getRegistroLlamada() {
        return registroLlamada;
    }

    public void setRegistroLlamada(RegistroLlamada registroLlamada) {
        this.registroLlamada = registroLlamada;
    }

    public void cargarDatos() throws SQLException {
        
        RegistroLlamadaDB rldb=new RegistroLlamadaDB();
               
        listaRegistroLlamadas=rldb.listar();
        //listaRegistroLlamadas.put(registroLlamada.getId(), registroLlamada);
    }

    public void insertar(RegistroLlamada registroLlamada) throws RegistroLlamadaException, AlfanumericoException, SQLException {

        alfaNumero.vacio(registroLlamada.getCalle1());
        //if(listaRegistroLlamadas.containsKey(registroLlamada.getClave()))
        //throw new RegistroLlamadaException("Clave Existente");
        this.registroLlamada = registroLlamada;
        RegistroLlamadaDB rdb = new RegistroLlamadaDB();
        clave = rdb.getMaxId()+1;
        
        registroLlamada.setId(clave);


        rdb.grabar(registroLlamada);



        listaRegistroLlamadas.put(clave, registroLlamada);
    }

    public void modificar(RegistroLlamada registroLlamada) {
        this.registroLlamada = registroLlamada;
        listaRegistroLlamadas.put(registroLlamada.getId(), registroLlamada);
    }

    public RegistroLlamada buscar(int clave) throws RegistroLlamadaException {
        if (!listaRegistroLlamadas.containsKey(clave)) {
            throw new RegistroLlamadaException("Registro no Existente");
        }
        return listaRegistroLlamadas.get(clave);
    }

    public void eliminar(int clave) {
        listaRegistroLlamadas.remove(clave);
    }

    public DefaultTableModel tablaModelo() {
        Object nameColumns[] = {"clave", "fecha", "lugar"};
        DefaultTableModel miTableModel = new DefaultTableModel(nameColumns, 0);
        for (RegistroLlamada value : listaRegistroLlamadas.values()) {
            Object nuevaFila[] = {value.getId(), value.getFecha(), value.getCalle1()+","+value.getCalle2()};
            miTableModel.addRow(nuevaFila);
        }

        return miTableModel;
    }

    public DefaultTableModel tablaModelo(Notificador notificador) {
        Object nameColumns[] = {"clave", "fecha", "lugar"};
        DefaultTableModel miTableModel = new DefaultTableModel(nameColumns, 0);
        for (RegistroLlamada value : listaRegistroLlamadas.values()) {
            if (value.getNotificador().getCedula().equalsIgnoreCase(notificador.getCedula())) {
                Object nuevaFila[] = {value.getId(), value.getFecha(), value.getCalle1()+","+value.getCalle2()};
                miTableModel.addRow(nuevaFila);
            }
        }
        return miTableModel;
    }
}
